package com.heihei.imgpreview;

import com.heihei.constant.MessageConstant;
import com.heihei.util.FileUtilF;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 分包（根据其下视频图片情况，分包）
 *
 * @version 1.0
 * @since JDK1.8
 * @author duanhengfei
 * @date 2021年02月10日 10:48:36
 */
public class DivideImgAndVideo {
    public static void main(String[] args) throws IOException {
        start();
    }

    public static void start() throws IOException {
        System.out.println("请输入目标的父级目录：");
        File parentFile = FileUtilF.getValidSrcDir();
        startDivideDir(parentFile);
        System.out.println(MessageConstant.EVERYTHING_IS_OK);
    }

    /**
     * 方法描述: 开始划分图包
     *
     * @param parentFile
     * @Return
     * @throws
     * @author duanhengfei
     * @date 2021年02月10日 10:48:18
     */
    private static void startDivideDir(File parentFile) throws IOException {
        File[] childrenFiles = parentFile.listFiles();
        File videoParent = new File(parentFile.getParent(), parentFile.getName() + "_video");
        File imgParent = new File(parentFile.getParent(), parentFile.getName() + "_img");
        File imgAndVideoParent = new File(parentFile.getParent(), parentFile.getName() + "_imgAndVideo");
        videoParent.mkdirs();
        imgParent.mkdirs();
        imgAndVideoParent.mkdirs();
        for (File child : childrenFiles) {
            if(child.isDirectory()) {
                int flag = judgeImgVideo(child);
                if(flag == 1) {
                    //全图片
                    child.renameTo(new File(imgParent, child.getName()));
                } else if(flag == 2) {
                    //有图片，有视频
                    child.renameTo(new File(imgAndVideoParent, child.getName()));
                } else if(flag == 3) {
                    //全视频
                    child.renameTo(new File(videoParent, child.getName()));
                }
            }
        }
    }

    /**
     * 方法描述: 判断该文件夹下，视频图片分布情况
     *
     * @param child
     * @Return {@link int}
     * @throws
     * @author duanhengfei
     * @date 2021年02月09日 22:22:24
     */
    private static int judgeImgVideo(File parentFileDir) throws IOException {
        List<String> imgList = new ArrayList<>();
        List<String> videoList = new ArrayList<>();
        FileUtilF.handleFiles(parentFileDir, file -> {
            if(FileUtilF.isImg(file)) {
                imgList.add(file.getName());
            } else if(FileUtilF.isVideo(file)) {
                videoList.add(file.getName());
            }
            if(imgList.size() > 0 && videoList.size() > 0) {
                return;
            }
        }, 1);
        if(imgList.size() > 0 && videoList.size() == 0) {
            return 1;
        }
        if(imgList.size() == 0 && videoList.size() > 0) {
            return 3;
        }
        if(imgList.size() > 0 && videoList.size() > 0) {
            return 2;
        }
        return 0;
    }
}